<?php
error_reporting(E_ALL & ~E_NOTICE);
//获取数据
$email = trim( $_REQUEST['email'] );
$password = trim( $_REQUEST['password'] );
$password2 = trim( $_REQUEST['password2'] );
$nowdate = date('Y-m-d H:i:s');

//数据检查
if(strlen($email) < 1) die("Email不能为空");
if(mb_strlen($password) < 1) die("密码不能为空");
if(mb_strlen($password) < 6 || mb_strlen($password) > 12) die("密码应为6~12个字符");
if(strlen($password2) < 1) die("重复密码不能为空");

if($password != $password2) die("两次输入密码不一致");

if (!filter_var($email, FILTER_VALIDATE_EMAIL))
{
  die("Email地址输入不符合格式");
}

//die("注册输入正确");
//连接数据库
//$sql = "INSERT INTO `user` (`id`, `emile`, `password`, `created_at`) VALUES (NULL, '". mysql_real_escape_string($email)."', '". mysql_real_escape_string($password)."', '". date("Y-m-d H-m-s") ."')";

$dbms='mysql';     //数据库类型
$host='localhost'; //数据库主机名
$dbName='fcoucv';    //使用的数据库
$user='root';      //数据库连接用户名
$pass='40qGYxok';          //对应的密码
$dsn="$dbms:host=$host;dbname=$dbName";


try {
    $dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //设置错误模式
    //echo "连接成功<br/>";
    //默认这个不是长连接，如果需要数据库长连接，需要最后加一个参数：array(PDO::ATTR_PERSISTENT => true) 变成这样：
    //$dbh = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
    /*你还可以进行一次搜索操作
    foreach ($dbh->query('SELECT * from FOO') as $row) {
        print_r($row); //你可以用 echo($GLOBAL); 来看到这些值
    }
    */
    //断开连接 $dbh = null; 

    $dbh->beginTransaction(); //事务开始
    
    //数据库操作
    //预处理语句写法
    $sql = "INSERT INTO `user` ( `emile`, `password`, `created_at`) VALUES (?,?,?)";
    $stmt = $dbh->prepare($sql);

    /*
    $stmt->bindParam(1, $email);
    $stmt->bindParam(2, password_hash($password , PASSWORD_DEFAULT) );
    $stmt->bindParam(3, $nowdate);
    */

    //绑定参数
    $stmt->execute( [$email, password_hash($password , PASSWORD_DEFAULT), $nowdate] );
    $dbh->commit(); //事务提交 结束

    //echo "注册成功<br/>";

    //header('Location: user_login.php');
    die("用户注册成功<script> location = 'user_login.php' </script>");


} catch (PDOException $e) {
    $dbh->rollBack(); //之前事务回滚
    $errorInfo = $stmt->errorInfo();
    if($errorInfo[1] == 1062)
        die ("Email地址已被注册<br/>");
    else
        die ("Error!: " . $e->getMessage() . "<br/>");
}
    


?>